package com.yujiahao.bigdata.sql

import org.apache.spark.sql.expressions.Aggregator
import org.apache.spark.sql._

object SparkSQL01_INOUT {
  def main(args: Array[String]): Unit = {
    //TODO 1、SparkSQL直接构建无法构建，包是私有的，使用伴生对象伴生类构建builder
    //SparkSQL对SparkCore进行了封装，所以环境也要发生变化

    val spark = SparkSession.builder
      .master("local")
      .appName("Word Count")
      .getOrCreate()
    import spark.implicits._
    //TODO 读取文件
    //Parquet file--列式存储  magic number at tail [80, 65, 82, 49]
    //Spark 默认的读取的文件格式为Parquet file列式存储
    //val df: DataFrame = spark.read.load("data/user.json")
    //如果想要对特定格式的文件进行解析，可以使用format方法
    val df: DataFrame = spark.read.format("json").load("data/user.json")
    df.show()

    //TODO 写文件 默认是parquet，当然也可以指定,但是要保证有文件的，这里的spark就不可以
    //默认保存的路径已经存在就会发生错误，如果不想发生错误，可以更改保存模式mode
    // mode参数可以使用字符串也可以SaveMode.Ignore
    df.write.format("json").mode("append").save("output")

    //TODO JSON
    // SparkSQL可以读取JSON格式的文件
    // 标准的JSON格式的文件，需要整个文件符合JSON格式
    // SparkSQL是Spark框架的一个模块
    // Spark框架读取文件按行读取，应该保证文件的一行数据符合JSON格式，而不是整个文件
    // 常见情况下，JSON文件中的每一行符合JSON对象即可
    // 如果默认保存的路径已经存在，那么会发生错误
    // 如果不想发生错误，可以更改保存模式

    //TODO 2、关闭资源
    spark.stop()
  }


}
